home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / fsw / zm302 / zm302_s.lzh / MPSRC045.LZH / ADP_0103.HAS < prev    next >
Text File  |  1996-06-16  |  5KB  |  212 lines

  1. *=======================================================
  2. *
  3. *    ADPCM->PCM 5.2kHz変換
  4. *
  5. *=======================================================
  6.  
  7. AtoP5n        macro        _X,_vol
  8.  
  9.         local        next
  10.  
  11.     .if    _X
  12.         cmpa.l        a3,a0            * トラップにかかった?
  13.         bcs        next
  14.         jsr        (a4)            * トラップ処理
  15.     .endif
  16. next:        moveq.l        #0,d0            * (4)
  17.         move.b        (a0)+,d0        * (8)
  18.         add.w        d0,d0            * (4)
  19.         adda.w        d0,a2            * (8)
  20.         add.w        (a2),d1            * (8)
  21.     .if    _vol=8
  22.         add.w        d1,(a1)+
  23.         add.w        d1,(a1)+
  24.         add.w        d1,(a1)+
  25.     .else
  26.         move.w        d1,d0            * (4)
  27.         VOLUME        _vol,d0,d2
  28.         add.w        d0,(a1)+
  29.         add.w        d0,(a1)+
  30.         add.w        d0,(a1)+
  31.     .endif
  32.         add.w        256*2(a2),d1        * (12)
  33.     .if    _vol=8
  34.         add.w        d1,(a1)+
  35.         add.w        d1,(a1)+
  36.         add.w        d1,(a1)+
  37.     .else
  38.         move.w        d1,d0            * (4)
  39.         VOLUME        _vol,d0,d2
  40.         add.w        d0,(a1)+
  41.         add.w        d0,(a1)+
  42.         add.w        d0,(a1)+
  43.     .endif
  44.         adda.w        256*2*2(a2),a2        * (16)
  45.  
  46.         endm
  47.  
  48. *=======================================================
  49.  
  50. AtoP_0103_mac    macro        _vol
  51.  
  52.         local        ADPCM_odd
  53.  
  54.         tst.b        CH_ODDEVEN(a5)        * ODD/EVEN FLAG    のチェック
  55.         bpl        ADPCM_odd        * 変換が1ADPCMずれる場合
  56.  
  57. *        前が奇数番目のADPCMを処理していた場合
  58. @@:        moveq.l        #(MIX_SIZE/3)-1,d2    * (4) 今回の処理中になんらかの
  59.         add.l        a0,d2            * (8) トラップが発生するか調べる
  60.         cmp.l        a3,d2            * (6)
  61.         bcs        @f            * (10)
  62.  
  63. *        トラップ判定あり
  64.         moveq.l        #MIX_SIZE/3-1,d6
  65. 1:        AtoP5n        1,_vol            * MIX_SIZE/3 倍展開
  66.         dbra        d6,1b
  67.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  68.     .if    _vol=8
  69.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  70.     .else
  71.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  72.     .endif
  73.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  74.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  75.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  76.         rts
  77.  
  78. *        トラップ判定無し
  79. @@:        moveq.l        #MIX_SIZE/3-1,d6
  80. 1:        AtoP5n        0,_vol            * MIX_SIZE/3 倍展開
  81.         dbra        d6,1b
  82.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  83.     .if    _vol=8
  84.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  85.     .else
  86.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  87.     .endif
  88.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  89.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  90.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  91.         rts
  92.  
  93. *        前が偶数番目のADPCMを処理していた場合
  94. ADPCM_odd:    moveq.l        #MIX_SIZE/3,d2        * (4) 今回の処理中になんらかの
  95.         add.l        a0,d2            * (8) トラップが発生するか調べる
  96.         cmp.l        a3,d2            * (6)
  97.         bcs        @f            * (10)
  98.  
  99. *        トラップ判定あり
  100.     .if    _vol=8
  101.         add.w        d1,(a1)+
  102.         add.w        d1,(a1)+
  103.         add.w        d1,(a1)+
  104.     .else
  105.         move.w        d1,d0
  106.         VOLUME        _vol,d0,d2
  107.         add.w        d0,(a1)+
  108.         add.w        d0,(a1)+
  109.         add.w        d0,(a1)+
  110.     .endif
  111.         moveq.l        #MIX_SIZE/3-1-1,d6
  112. 1:        AtoP5n        1,_vol            * MIX_SIZE/3-1 倍展開
  113.         dbra        d6,1b
  114.                             * ラストの1回
  115.         cmpa.l        a3,a0            * トラップにかかった?
  116.         bcs        1f
  117.         jsr        (a4)            * トラップ処理
  118. 1:        moveq.l        #0,d0            * (4)
  119.         move.b        (a0)+,d0        * (8)
  120.         add.w        d0,d0            * (4)
  121.         adda.w        d0,a2            * (8)
  122.         add.w        (a2),d1            * (8)
  123.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  124.     .if    _vol=8
  125.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  126.         add.w        d1,(a1)+
  127.         add.w        d1,(a1)+
  128.         add.w        d1,(a1)+
  129.     .else
  130.         move.w        d1,d0            * (4)
  131.         VOLUME        _vol,d0,d2
  132.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  133.         add.w        d0,(a1)+
  134.         add.w        d0,(a1)+
  135.         add.w        d0,(a1)+
  136.     .endif
  137.         add.w        256*2(a2),d1        * (12)
  138.         adda.w        256*2*2(a2),a2        * (16)
  139.  
  140.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  141.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  142.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  143.         rts
  144.  
  145. *        トラップ判定無し
  146. @@:
  147.     .if    _vol=8
  148.         add.w        d1,(a1)+
  149.         add.w        d1,(a1)+
  150.         add.w        d1,(a1)+
  151.     .else
  152.         move.w        d1,d0
  153.         VOLUME        _vol,d0,d2
  154.         add.w        d0,(a1)+
  155.         add.w        d0,(a1)+
  156.         add.w        d0,(a1)+
  157.     .endif
  158.         moveq.l        #MIX_SIZE/3-1-1,d6
  159. 1:        AtoP5n        0,_vol            * MIX_SIZE/3-1 倍展開
  160.         dbra        d6,1b
  161.                             * ラストの1回
  162.         moveq.l        #0,d0            * (4)
  163.         move.b        (a0)+,d0        * (8)
  164.         add.w        d0,d0            * (4)
  165.         adda.w        d0,a2            * (8)
  166.         add.w        (a2),d1            * (8)
  167.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  168.     .if    _vol=8
  169.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  170.         add.w        d1,(a1)+
  171.         add.w        d1,(a1)+
  172.         add.w        d1,(a1)+
  173.     .else
  174.         move.w        d1,d0            * (4)
  175.         VOLUME        _vol,d0,d2
  176.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  177.         add.w        d0,(a1)+
  178.         add.w        d0,(a1)+
  179.         add.w        d0,(a1)+
  180.     .endif
  181.         add.w        256*2(a2),d1        * (12)
  182.         adda.w        256*2*2(a2),a2        * (16)
  183.  
  184.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  185.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  186.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  187.         rts
  188.  
  189.         endm
  190.  
  191. *=======================================================
  192.  
  193. AtoP_0103_v00:    AtoP_0103_mac    0
  194. AtoP_0103_v01:    AtoP_0103_mac    1
  195. AtoP_0103_v02:    AtoP_0103_mac    2
  196. AtoP_0103_v03:    AtoP_0103_mac    3
  197. AtoP_0103_v04:    AtoP_0103_mac    4
  198. AtoP_0103_v05:    AtoP_0103_mac    5
  199. AtoP_0103_v06:    AtoP_0103_mac    6
  200. AtoP_0103_v07:    AtoP_0103_mac    7
  201. AtoP_0103_v08:    AtoP_0103_mac    8
  202. AtoP_0103_v09:    AtoP_0103_mac    9
  203. AtoP_0103_v10:    AtoP_0103_mac    10
  204. AtoP_0103_v11:    AtoP_0103_mac    11
  205. AtoP_0103_v12:    AtoP_0103_mac    12
  206. AtoP_0103_v13:    AtoP_0103_mac    13
  207. AtoP_0103_v14:    AtoP_0103_mac    14
  208. AtoP_0103_v15:    AtoP_0103_mac    15
  209. AtoP_0103_vnn:    AtoP_0103_mac    'n'
  210. AtoP_0103_non:    AtoP_0103_mac    'x'
  211.  
  212.